package kjh820909.swing;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JSeparator;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

// 스윙 시나리오
// 1. 제목표시줄 설정 : setTitle
// 2. 프로그램 크기 및 위치 설정 : setBounds
//    x좌표, y좌표, 가로크기, 세로크기
// 3. 프레임 크기 변경 불가 : setResizable
// 4. 프로그램 아이콘 설정 : setIconImage
// 5. splash 화면 설정
//    META-INF 폴더에
//    MANIFEST.MF 파일 작성
//    SplashScreen-Image : 항목 추가
//    splash 화면 뜨는 시간 : Thread.sleep(2500)
//    File - Export : Java - Jar
// 6. Look And Feel 변경
//	  룩앤필  : GUI 측면과 디자인 구성에 사용하는 용어
//   즉, 색상, 모양, 레이아웃, 서체, 버튼,
//   메뉴등의 등적요소를 의미
//   Swing에서 제공하는 룩앤필은 밋밋하기 때문에
//   이것을 교체하는 특별한  API를 제공
//   UIManager.setLookAndFeel()
// 7. 프레임 닫기 이벤트 처리
//   프레임 닫기시 이벤트를 걸고 싶으면
//   WindowListener - windowClosing을 사용
//   하지만, 편의성을 위해  WindowAdapter를
//   사용하는 것을 추천!
// 8. 메뉴추가
//	   추가순서 : JMenuBar - JMenu - JMenuItem
//	  JMenu 객체 생성 - JMenuBar에 add로 등록
// JMenuItem 객체 생성 - JMenu에 add로 등록
// JMenuItem 의 setIcon를 이용해서 아이콘 드옭
// JMenuItem 의 setEnable를 이용해서 메뉴 활성여부 지정
// JMenuItem 의 addActionListener를 이용해서 메뮤 클릭시 처리할 이벤트 지정
// 9. 대화상자 표시
// JDialog 를 이용해서 대화상자를 만들고
// setVisible로 화면에 표시
// JDialog 창을 닫을때는 dispose() 이용
// 10. JLabel
// 문자열을 출력할 때 또는 이미지를 출력할 때 싸용
// 이미지 출력시 setIcon 을 이용
// 그림이 클 경우 나머지 영역은 잘려서 보이지 않을 수 있음
// 문자열 출력시 setText를 이용
// 여러 줄 출력시 문장 시작 전 <html><pre> 를, 
// 문장 끝에 </pre></html> 를 추가해 준다
// 글자 색상은 setForeground로
// 글자 폰트나 모양은 setFont로 설정
// 11. 화면 정중앙에 표시
// setLocationRelativeTo(null) 로 설정



public class SwingProject extends JFrame {

	private JPanel contentPane;
	
	private static final String METAL
	= "javax.swing.plaf.metal.MetalLookAndFeel";
	private static final String NIMBUS
	= "javax.swing.plaf.nimbus.NimbusLookAndFeel";

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Thread.sleep(2500);	// 5
					
					// 룩앤필 변경 시작 6b
					JFrame.setDefaultLookAndFeelDecorated(true);
					JDialog.setDefaultLookAndFeelDecorated(true); //6c
					UIManager.setLookAndFeel(METAL);
					//UIManager.setLookAndFeel(NIBUS);
					// 룩앤필 변경 끝 6b
					
					
					SwingProject frame = new SwingProject();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public SwingProject() {
		setIconImage(Toolkit.getDefaultToolkit().getImage(SwingProject.class.getResource("/kjh820909/swing/images/img/suji01a.jpg")));
		setTitle("스윙 프로젝트 v1");		//1
		//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 7
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // 7
		// 닫기 버튼 클릭시 이벤트 처리 시작 // 7
		addWindowListener(
				// 윈도우(frame) 발생하는 이벤트를
				// 감지하기 위해 WindowListener 추가
				
				new WindowAdapter() {
					// 이벤트 발생시 그것을 처리하는
					// 메서드를 호출하기 위해 
					// 기본 클래스로 정의된
					// WindowAdapter 클래스 생성

					public void windowClosing(java.awt.event.WindowEvent e) {
						JFrame f = (JFrame)e.getSource();
						// 이벤트를 발생시킨 주체가 누군지 알아냄
						int choice = JOptionPane
							.showConfirmDialog(
							f, "정말로 프로그램을 끝내시겠어요?",
							"프로그램 종료",
							JOptionPane.YES_NO_OPTION);
						// 확인,취소 버튼으로 이루어진
						// 대화상자를 모달창으로 표시
						
						if(choice ==
								JOptionPane.YES_OPTION)
							f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
						// 대화상자에서 '확인'버튼을 클릭하면
						// 현재 프레임을 닫고 프로그램 종료
					} // closing
					// 윈도우가 닫히는 이벤트 발생시
					// windowClosing 메서드로 처리
				
				} // adapter
			);
		// 닫기 버튼 클릭시 이벤트 처리 끝 // 7
		
		setBounds(100, 100, 800, 600);	//2
		setResizable(false);			//3
		setLocationRelativeTo(null);
		
		
		// 메뉴 추가 시작 8
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnFile = new JMenu(" 파 일 (F)");
		menuBar.add(mnFile);
		
		JMenuItem miNew = new JMenuItem("새로만들기(N)");
		miNew.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(
						null, "준비중입니다!");
				// 간단한 메세지 대화상자 출력
						
			}
		});
		miNew.setIcon(new ImageIcon(SwingProject.class.getResource("/kjh820909/swing/images/menu/new.png")));
		mnFile.add(miNew);
		
		JMenuItem miOpen = new JMenuItem("열 기 (O)");
		mnFile.add(miOpen);
		
		JMenuItem miSave = new JMenuItem("저 장 (S)");
		mnFile.add(miSave);
		
		JMenuItem miPrint = new JMenuItem("인 쇄 (P)");
		mnFile.add(miPrint);
		
		JSeparator separator = new JSeparator();
		mnFile.add(separator);
		
		JMenuItem miExit = new JMenuItem("끝내기(X)");
		miExit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
		
						int choice = JOptionPane	
						.showConfirmDialog(
								null, "정말로 프로그램을 끝내시겠어요?",
									"프로그램 종료",
									JOptionPane.YES_NO_OPTION);
						if(choice ==
							JOptionPane.YES_OPTION)
							System.exit(0);
										
			}
		});
		miExit.setIcon(new ImageIcon(SwingProject.class.getResource("/kjh820909/swing/images/menu/close.png")));
		mnFile.add(miExit);
		
		JMenu mnEdit = new JMenu(" 편 집 (E)");
		menuBar.add(mnEdit);
		
		JMenuItem mntmNewMenuItem = new JMenuItem("실행 취소 (U)");
		mntmNewMenuItem.setEnabled(false);
		mnEdit.add(mntmNewMenuItem);
		
		JMenuItem mntmNewMenuItem_2 = new JMenuItem("잘라 내기 (T)");
		mnEdit.add(mntmNewMenuItem_2);
		
		JMenuItem mntmNewMenuItem_3 = new JMenuItem("복 사 (C)");
		mnEdit.add(mntmNewMenuItem_3);
		
		JMenuItem mntmNewMenuItem_4 = new JMenuItem("붙여 넣기 (P)");
		mnEdit.add(mntmNewMenuItem_4);
		
		JMenuItem mntmNewMenuItem_1 = new JMenuItem("삭 제 (L)");
		mnEdit.add(mntmNewMenuItem_1);
		
		JMenu mnView = new JMenu(" 보 기 (V)");
		menuBar.add(mnView);
		
		JMenuItem mntmNewMenuItem_5 = new JMenuItem("상태표시줄(S)");
		mnView.add(mntmNewMenuItem_5);
		
		JMenu mnLayout = new JMenu("배치관리자(L)");
		menuBar.add(mnLayout);
		
		JMenuItem miFlow = new JMenuItem("Flow Layout (F)");
		miFlow.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Flow_Layout about = new Flow_Layout();
				about.setVisible(true); // 9
			}
		});
		mnLayout.add(miFlow);
		
		JMenuItem miBorder = new JMenuItem("Border Layout (B)");
		miBorder.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Border_Layout about = new Border_Layout();
				about.setVisible(true); // 9
			}
		});
		mnLayout.add(miBorder);
		
		JMenuItem miCard = new JMenuItem("Card Layout (C)");
		miCard.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Card_Layout about = new Card_Layout();
				about.setVisible(true); // 9			
			}
		});
		mnLayout.add(miCard);
		
		JMenuItem miGrid = new JMenuItem("Grid Layout (G)");
		miGrid.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Grid_Layout about = new Grid_Layout();
				about.setVisible(true); // 9
				
			}
		});
		mnLayout.add(miGrid);
		
		JMenu mnTool = new JMenu(" 도 구 (T)");
		menuBar.add(mnTool);
		
		JMenu mnHelp = new JMenu("도움말(H)");
		menuBar.add(mnHelp);
		
		JMenuItem miAbout = new JMenuItem("스윙 프로젝트에 관하여");
		miAbout.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				AboutProject about = new AboutProject();
				about.setVisible(true); // 9
				
				
			}
		});
		mnHelp.add(miAbout);
		
		JMenuItem mntmNewMenuItem_7 = new JMenuItem("메모장 정보(A)");
		mnHelp.add(mntmNewMenuItem_7);
		
		JMenu mnComp = new JMenu("컴퍼넌트 (C)");
		menuBar.add(mnComp);
		
		JMenuItem miBComp = new JMenuItem("기본 컴퍼넌트 (B)");
		miBComp.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				BComp bc = new BComp();
				bc.setVisible(true);
			}
		});
		mnComp.add(miBComp);
		
		JMenuItem miAComp = new JMenuItem("고급 컴퍼넌트 (A)");
		miAComp.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				AComp ac = new AComp();
				ac.setVisible(true);
			}
		});
		mnComp.add(miAComp);
		
		JMenuItem miJtable = new JMenuItem("JTable (T)");
		miJtable.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				CJTable cjt = new CJTable();
				cjt.setVisible(true);
			}
		});
		mnComp.add(miJtable);
		
		JMenu mnNewMenu = new JMenu("JDBC (J)");
		menuBar.add(mnNewMenu);
		
		JMenuItem mntmNewMenuItem_6 = new JMenuItem("데이터 입력");
		mnNewMenu.add(mntmNewMenuItem_6);
		
		JMenuItem mntmNewMenuItem_8 = new JMenuItem("데이터 조회/수정/삭제");
		mnNewMenu.add(mntmNewMenuItem_8);
		
		JMenuItem mntmNewMenuItem_9 = new JMenuItem("우편번호 검색");
		mntmNewMenuItem_9.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ZipcodeMain zm = new ZipcodeMain();
				zm.setVisible(true);
			}
		});
		mnNewMenu.add(mntmNewMenuItem_9);
		
		JMenuItem mntmNewMenuItem_10 = new JMenuItem("이미지 처리");
		mnNewMenu.add(mntmNewMenuItem_10);
		// 메뉴 추가 끝  // 8 
		
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
	}

}
